package com.edu.compile;

import com.edu.model.dto.NodeMetadata;

/**
 * 编译抽象类
 *
 * @author yanzhao
 * @date 2021/10/18 22:57
 * @since 1.0.0
 */
public interface Compiler<C, T> {

    /**
     * 编译节点元数据为模板元数据
     *
     * @param compileResult
     * @param nodeMetadata
     * @param config
     * @param template
     */
    void compile(AbstractCompileResult compileResult, NodeMetadata nodeMetadata, C config, T template);

    /**
     * 获取节点模板
     * 节点元数据解析为模板元数据
     * 每个模板对应一个解析规则
     *
     * @param compileResult
     * @param nodeMetadata
     * @return
     */
    T getTemplate(AbstractCompileResult compileResult, NodeMetadata nodeMetadata);

    /**
     * 注册模板到解析树
     *
     * @param compileResult
     * @param template
     */
    void registerTemplate(AbstractCompileResult compileResult, T template);
}
